package org.example.operator.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *  案例实操
 *
 */
object Spark01_RDD_Operator_Reduce {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)

    val rdd: RDD[Int] = context.makeRDD(List(1,2,3,4),2)
    // 累加
    val i: Int = rdd.reduce(_+_)

    /**
      *  collect 方法会将不同分区的数据
      *  按照分区顺序采集到Driver端的内存中，形成数组
      */
    val ints: Array[Int] = rdd.collect()

    // 数据源中的个数
    val l: Long = rdd.count()

    // 获取数据源中的第一个
    val j: Int = rdd.first()
    // 取前三个
    val ints1: Array[Int] = rdd.take(3)
    // 数据排序后，取前n个，默认降序
    val test1: Array[Int] = rdd.takeOrdered(3)(Ordering.Int.reverse)

    context.stop()
  }
}
